#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
                            _ooOoo_  
                           o8888888o  
                           88" . "88  
                          (|  -_-  |)  
                           O\  =  /O  
                        ____/`---'\____  
                      .   ' \\| |// `.  
                       / \\||| : |||// \  
                     / _||||| -:- |||||- \  
                       | | \\\ - /// | |  
                     | \_| ''\---/'' | |  
                      \ .-\__ `-` ___/-. /  
                   ___`. .' /--.--\ `. . __  
                ."" '< `.___\_<|>_/___.' >'"".  
               | | : `- \`.;`\ _ /`;.`/ - ` : | |  
                 \ \ `-. \_ __\ /__ _/ .-` / /  
         ======`-.____`-.___\_____/___.-`____.-'======  
                            `=---='  
  
         .............................................  
                  佛祖镇楼                  BUG辟易  
          佛曰:  
                  写字楼里写字间，写字间里程序员；  
                  程序人员写程序，又拿程序换酒钱。  
                  酒醒只在网上坐，酒醉还来网下眠；  
                  酒醉酒醒日复日，网上网下年复年。  
                  但愿老死电脑间，不愿鞠躬老板前；  
                  奔驰宝马贵者趣，公交自行程序员。  
                  别人笑我忒疯癫，我笑自己命太贱；  
                  不见满街漂亮妹，哪个归得程序员？ 
'''
# @File  : 2.py
# @Author: huguangzhi
# @Drivce: Thinkpad E470
# @ContactEmail : huguangzhi@ucsdigital.com.com 
# @ContactPhone : 13121961510 
# @Date  : 2021/9/2 - 10:48
# @Desc  :

#服务端Linux系统下：处理命令并返回
import socket
import os

#声明类型，生成socket链接对象
server = socket.socket()

#监听接收端口元组(本地，端口)，绑定要监听的端口
server.bind(('111.28.135.194 ',60001))

#1.监听
#2.“5”最大监听数，允许多少人在排队
server.listen(5)

print("我要开始等待客户端了")

#循环锁定访问客户端
while True:

    #1.等待客户端 #会返回链接的标记位conn，与连接的地址
    #2.客户端同过conn,addr进行通话
    #3.conn就是客户端连接过来而在服务器端为其生成的一个连接实例
    conn,addr = server.accept()

    #查看标记位与IP地址
    print(conn,addr)


    print("客户端 他 进来了！")

    #循环处理客户端请求
    while True:

        #1.接收数据,1024字节
        #2.如果发不完会存在缓冲去，下次在发送。
        #3.缓冲区每次最多发32768字节
        #4.每个系统不同，超出数值会有限制。
        data = conn.recv(102400)

        #返回
        print(data)

        #Linux系统内可以判断是否为空。
        if not data:break

        #执行命令，赋值给变量
        res = os.popen(data).read()

        #返回一个值，返回res命令
        conn.send(res)

        #sendll就是循环send，用法发送大型文件。
        #conn.sendll(res)


#关闭链接
server.close()